package com.qyy.springblog.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.DigestUtils;

import java.util.UUID;

@Slf4j
public class SecurityUtils {
    /**
     * 根据明文进行加密
     * @param password
     * @return
     */
    public static String encrypt(String password){
        String md5Str = DigestUtils.md5DigestAsHex(password.getBytes());
        String salt = UUID.randomUUID().toString().replace("-","");
        String securityPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        return salt+securityPassword;
    }

    /**
     * 密码校验
     * @param inputPassword
     * @param sqlPassword
     * @return
     */
    public static boolean verify(String inputPassword,String sqlPassword){
        if(sqlPassword == null || sqlPassword.length()!=64){//检查数据库存储的密码是否为 64 位字符串（32 位盐 + 32 位哈希）。
            log.error("数据库中密码格式错误！");
            return false;
        }
        String salt = sqlPassword.substring(0,32);//从存储的密码中截取前 32 位作为盐值。
        String secretPassword = DigestUtils.md5DigestAsHex((salt + inputPassword).getBytes());
        //使用提取的盐值和用户输入的密码，重新计算哈希值。
        return sqlPassword.equals(salt+secretPassword);
        //将存储的哈希值与重新计算的哈希值比较，判断密码是否匹配。
    }
}
